home *** CD-ROM | disk | FTP | other *** search
- /**************************************************************************
- * *
- * Copyright (C) 1994, Silicon Graphics, Inc. *
- * *
- * These coded instructions, statements, and computer programs contain *
- * unpublished proprietary information of Silicon Graphics, Inc., and *
- * are protected by Federal copyright law. They may not be disclosed *
- * to third parties or copied or duplicated in any form, in whole or *
- * in part, without the prior written consent of Silicon Graphics, Inc. *
- * *
- **************************************************************************/
-
- #ifndef _SYS_DMI_H
- #define _SYS_DMI_H
-
-
- /*
- * Events
- */
-
- typedef enum {
- DM_EVENT_INVALID = 0,
- DM_EVENT_MOUNT = 1,
- DM_EVENT_PREUNMOUNT = 2,
- DM_EVENT_UNMOUNT = 3,
- DM_EVENT_DEBUT = 4,
- DM_EVENT_CREATE = 5,
- DM_EVENT_6 = 6,
- DM_EVENT_POSTCREATE = 7,
- DM_EVENT_REMOVE = 8,
- DM_EVENT_POSTREMOVE = 9,
- DM_EVENT_RENAME = 10,
- DM_EVENT_POSTRENAME = 11,
- DM_EVENT_LINK = 12,
- DM_EVENT_POSTLINK = 13,
- DM_EVENT_SYMLINK = 14,
- DM_EVENT_POSTSYMLINK = 15,
- DM_EVENT_READ = 16,
- DM_EVENT_WRITE = 17,
- DM_EVENT_TRUNCATE = 18,
- DM_EVENT_ATTRIBUTE = 19,
- DM_EVENT_DESTROY = 20,
- DM_EVENT_NOSPACE = 21,
- DM_EVENT_USER = 22,
- DM_EVENT_MAX = 23,
- DM_EVENT_24 = 24,
- DM_EVENT_25 = 25,
- DM_EVENT_26 = 26,
- DM_EVENT_27 = 27,
- DM_EVENT_28 = 28,
- DM_EVENT_29 = 29,
- DM_EVENT_30 = 30,
- DM_EVENT_31 = 31
- } dm_eventtype_t;
-
-
- /*
- * Elemental types
- */
-
- typedef int dm_token_t;
- typedef int dm_sessid_t;
- typedef __uint64_t dm_size_t;
- typedef __int64_t dm_ssize_t;
- typedef __int64_t dm_off_t;
- typedef __int64_t dm_attrloc_t;
-
- #define DM_INVALID_TOKEN 0
- #define DM_NO_TOKEN (-1)
-
-
- /*
- * Variable length data descriptor
- */
-
- typedef struct dm_vardata {
- int vd_offset; /* offset from start of containing struct */
- u_int vd_length; /* length of data starting at vd_offset */
- } dm_vardata_t;
-
- #define vd_off vd_offset
- #define vd_len vd_length
-
-
- /*
- * Event messages
- */
-
- typedef struct dm_eventmsg {
- int _link; /* offset to next dm_eventmsg_t */
- dm_eventtype_t ev_type; /* event type */
- int ev_reserved;
- dm_token_t ev_token; /* token for event */
- dm_vardata_t ev_data; /* the event-specific variable data */
- } dm_eventmsg_t;
-
-
- /*
- * Types for dm_send_msg()
- */
-
- typedef enum {
- DM_MSGTYPE_INVALID,
- DM_MSGTYPE_SYNC,
- DM_MSGTYPE_ASYNC
- } dm_msgtype_t;
-
-
- /*
- * Managed regions
- */
-
- typedef struct dm_region {
- dm_off_t rg_offset;
- dm_size_t rg_size;
- u_int rg_flags;
- u_int rg_padding;
- } dm_region_t;
-
- /* Values for rg_flags */
- #define DM_REGION_NOEVENT 0x0
- #define DM_REGION_READ 0x1
- #define DM_REGION_WRITE 0x2
- #define DM_REGION_TRUNCATE 0x4
-
-
- /*
- * Extents
- */
-
- typedef enum {
- DM_EXTTYPE_INVALID,
- DM_EXTTYPE_RES,
- DM_EXTTYPE_HOLE
- } dm_extenttype_t;
-
- typedef struct dm_extent {
- dm_extenttype_t ex_type;
- u_int ex_padding;
- dm_off_t ex_offset;
- dm_size_t ex_length;
- } dm_extent_t;
-
-
- /*
- * Configuration options
- */
-
- typedef enum {
- DM_CONFIG_INVALID,
- DM_CONFIG_MAX_ATTRIBUTE_SIZE,
- DM_CONFIG_MAX_MANAGED_REGIONS,
- DM_CONFIG_MAX_MESSAGE_DATA,
- DM_CONFIG_PERS_ATTRIBUTES,
- DM_CONFIG_PERS_EVENTS,
- DM_CONFIG_PERS_MANAGED_REGIONS,
- DM_CONFIG_PUNCH_HOLE,
- DM_CONFIG_TOTAL_ATTRIBUTE_SPACE,
- DM_CONFIG_WILL_RETRY
- } dm_config_t;
-
-
- /*
- * Event lists are defined as bitmasks with the event number (normally
- * an opaque datum) corresponding to the bit set in the mask. This is
- * directly based on select(2).
- */
-
- #ifndef NBBY /* number of bits per byte */
- #define NBBY 8
- #endif
-
- typedef unsigned int dm_evmask;
-
- #define NEVBITS (sizeof(dm_evmask) * NBBY) /* bits per mask */
-
- #ifndef howmany
- #define howmany(x, y) (((x)+((y)-1))/(y))
- #endif
-
- typedef struct dm_eventset {
- dm_evmask es_bits[howmany(DM_EVENT_MAX, NEVBITS)];
- } dm_eventset_t;
-
- #define DMEV_SET(n, p) ((p)->es_bits[(n)/NEVBITS] |= (1 << ((n) % NEVBITS)))
- #define DMEV_CLR(n, p) ((p)->es_bits[(n)/NEVBITS] &= ~(1 << ((n) % NEVBITS)))
- #define DMEV_ISSET(n, p)((p)->es_bits[(n)/NEVBITS] & (1 << ((n) % NEVBITS)))
-
- #define DMEV_ZERO(p) bzero((char *)(p), sizeof *(p))
-
-
- typedef struct dm_dispinfo {
- dm_vardata_t di_fshandle;
- dm_eventset_t di_eventset;
- } dm_dispinfo_t;
-
-
- /*
- * File attributes
- */
-
- /*
- * Mask values for mask argument to dm_get_fileattr,
- * dm_get_bulkattr, and dm_get_dirattrs.
- */
-
- #define DM_AT_HANDLE 0x0001
- #define DM_AT_EMASK 0x0002
- #define DM_AT_PMANR 0x0004
- #define DM_AT_PATTR 0x0008
- #define DM_AT_DTIMES 0x0010
- #define DM_AT_CFLAG 0x0020
- #define DM_AT_STAT 0x0040
-
- /*
- * Mask values for mask argument to dm_set_fileattr.
- */
-
- #define DM_AT_MODE 0x0001
- #define DM_AT_UID 0x0002
- #define DM_AT_GID 0x0004
- #define DM_AT_ATIME 0x0008
- #define DM_AT_MTIME 0x0010
- #define DM_AT_CTIME 0x0020
- #define DM_AT_DTIME 0x0040
-
-
- /* The dm_fileattr structure is only used by dm_set_fileattr */
-
- typedef struct dm_fileattr {
- mode_t fa_mode;
- uid_t fa_uid;
- gid_t fa_gid;
- time_t fa_atime;
- time_t fa_mtime;
- time_t fa_ctime;
- time_t fa_dtime;
- int fa_spare;
- } dm_fileattr_t;
-
- /*
- * The dm_stat structure is used for retrieving per-file attributes via
- * the dm_get_fileattrs(), dm_get_dirattrs() and dm_get_bulkattr() calls.
- */
- typedef struct dm_stat {
- int _link;
- dm_vardata_t dt_handle;
- dm_vardata_t dt_compname; /* file name; dm_get_dirattrs only */
- dm_eventset_t dt_emask;
- int dt_nevents;
- u_short dt_dmstate;
- u_char dt_pers;
- u_char dt_pmanreg;
- time_t dt_dtime;
- dm_size_t dt_spare1;
-
- dev_t dt_dev;
- ino64_t dt_ino;
- u_int dt_igen;
- mode_t dt_mode;
- nlink_t dt_nlink;
- uid_t dt_uid;
- gid_t dt_gid;
- dev_t dt_rdev;
- dm_off_t dt_size;
- time_t dt_atime;
- time_t dt_mtime;
- time_t dt_ctime;
- u_int dt_blksize;
- dm_size_t dt_blocks;
-
- u_int dt_xflags;
- u_int dt_extsize;
- u_int dt_extents;
- u_int dt_padding;
- dm_size_t dt_spare2;
- } dm_stat_t;
-
-
- #ifndef _KERNEL
-
- /*
- * Prototype used in the library.
- */
-
- int dmi (int opcode, ...);
-
- #endif /* notdef _KERNEL */
-
-
- /*
- * Opcodes for dmi syscall.
- */
-
- #define DM_PATH_TO_HANDLE 1
- #define DM_PATH_TO_FSHANDLE 2
- #define DM_FD_TO_HANDLE 3
- #define DM_HANDLE_TO_PATH 4
- #define DM_CREATE_SESSION 5
- #define DM_DESTROY_SESSION 6
- #define DM_SEND_MSG 7
- #define DM_GET_EVENT 8
- #define DM_RESPOND_EVENT 9
- #define DM_READ_INVIS 10
- #define DM_WRITE_INVIS 11
- #define DM_SET_EVENTLIST 12
- #define DM_SET_DISP 13
- #define DM_CREATE_USEREVENT 14
- #define DM_ASSOC_HANDLE 15
- #define DM_DISASSOC_HANDLE 16
- #define DM_QUERY_TOKEN 17
- #define DM_GETALL_SESSIONS 18
- #define DM_GETALL_TOKENS 19
- #define DM_GET_EVENTLIST 20
- #define DM_FIND_EVENTMSG 21
- #define DM_QUERY_SESSION 22
- #define DM_GET_MOUNTINFO 23
- #define DM_MOVE_EVENT 24
- #define DM_PROBE_HOLE 25
- #define DM_PUNCH_HOLE 26
- #define DM_GET_FILEATTR 27
- #define DM_SET_FILEATTR 28
- #define DM_GET_BULKATTR 29
- #define DM_GET_DIRATTRS 30
- #define DM_GET_ALLOCINFO 31
-
- /*
- * Action codes for dm_respond_event().
- */
-
- typedef enum {
- DM_RESP_INVALID,
- DM_RESP_CONTINUE,
- DM_RESP_ABORT,
- DM_RESP_DONTCARE,
- DM_RESP_RETRY
- } dm_response_t;
-
-
- /*
- * Prototypes.
- */
-
- int dm_init_service (void);
-
- int dm_get_config (
- void *hanp,
- size_t hlen,
- dm_config_t flagname,
- dm_size_t *retvalp);
-
- int dm_path_to_handle (
- char *path,
- void **hanp,
- size_t *hlen);
-
- int dm_path_to_fshandle (
- char *path,
- void **hanp,
- size_t *hlen);
-
- int dm_fd_to_handle (
- int fd,
- void **hanp,
- size_t *hlen);
-
- int dm_handle_to_fshandle (
- void *hanp,
- size_t hlen,
- void **fshanp,
- size_t *fshlen);
-
- int dm_handle_to_path (
- void *dirhanp,
- size_t dirhlen,
- void *targhanp,
- size_t targhlen,
- size_t buflen,
- char *bufp,
- size_t *rlenp);
-
- int dm_handle_cmp (
- void *hanp1,
- size_t hlen1,
- void *hanp2,
- size_t hlen2);
-
- u_int dm_handle_hash (
- void *hanp,
- size_t hlen);
-
- void dm_handle_free (
- void *hanp,
- size_t hlen);
-
- u_int dm_get_ino (
- void *hanp,
- size_t hlen);
-
- u_int dm_get_igen (
- void *hanp,
- size_t hlen);
-
- int dm_create_session (
- dm_sessid_t old,
- char *info,
- dm_sessid_t *new);
-
- int dm_destroy_session (
- dm_sessid_t sid);
-
- int dm_getall_sessions (
- u_int nelem,
- dm_sessid_t *sidp,
- u_int *nelemp);
-
- int dm_query_session (
- dm_sessid_t sid,
- size_t buflen,
- void *bufp,
- size_t *rlenp);
-
- int dm_get_mountinfo (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- size_t buflen,
- void *bufp,
- size_t *rlenp);
-
- int dm_get_events (
- dm_sessid_t sid,
- u_int maxmsgs,
- int nowait,
- size_t buflen,
- void *msgbuf,
- size_t *rlenp);
-
- int dm_respond_event (
- dm_sessid_t sid,
- dm_token_t token,
- dm_response_t response,
- int error);
-
- int dm_read_invis (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- dm_off_t offset,
- dm_size_t length,
- char *buf);
-
- int dm_write_invis (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- dm_off_t offset,
- dm_size_t length,
- char *buf);
-
- int dm_get_eventlist (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- u_int nelem,
- dm_eventset_t *evsetp,
- u_int *nelemp);
-
- int dm_set_eventlist (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- dm_eventset_t *evsetp,
- u_int evsetsize);
-
- int dm_set_disp (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- dm_eventset_t *evsetp,
- u_int evsetsize);
-
- int dm_create_userevent (
- dm_sessid_t sid,
- size_t buflen,
- void *msgdata,
- dm_token_t *tokenp);
-
- int dm_send_msg (
- dm_sessid_t sid,
- dm_msgtype_t msgtype,
- size_t buflen,
- void *msgdata);
-
- int dm_move_event (
- dm_sessid_t srcsid,
- dm_token_t token,
- dm_sessid_t targetsid,
- dm_token_t *rtokenp);
-
- int dm_assoc_handle (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token);
-
- int dm_disassoc_handle (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token);
-
- int dm_query_token (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- u_int *resultp);
-
- int dm_find_eventmsg (
- dm_sessid_t sid,
- dm_token_t token,
- size_t buflen,
- void *bufp,
- size_t *rlenp);
-
- int dm_getall_tokens (
- dm_sessid_t sid,
- u_int nelem,
- dm_token_t *tokenp,
- u_int *nelemp);
-
- int dm_get_region (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- u_int nelem,
- dm_region_t *regbufp,
- u_int *nelemp);
-
- int dm_set_region (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- u_int nelem,
- dm_region_t *regbufp,
- u_int *nelemp);
-
- int dm_probe_hole (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- dm_off_t off,
- dm_size_t len,
- dm_off_t *roffp,
- dm_size_t *rlenp);
-
- int dm_punch_hole (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- dm_off_t off,
- dm_size_t len);
-
- int dm_get_fileattr (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- u_int mask,
- dm_stat_t *attrp);
-
- int dm_set_fileattr (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- u_int mask,
- dm_fileattr_t *attrp);
-
- int dm_get_bulkattr (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- u_int mask,
- dm_attrloc_t *locp,
- size_t buflen,
- void *bufp,
- size_t *rlenp);
-
- int dm_get_dirattrs (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- u_int mask,
- dm_attrloc_t *locp,
- size_t buflen,
- void *bufp,
- size_t *rlenp);
-
- int dm_init_attrloc (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- dm_attrloc_t *locp);
-
- int dm_get_allocinfo (
- dm_sessid_t sid,
- void *hanp,
- size_t hlen,
- dm_token_t token,
- dm_off_t *offp,
- u_int nelem,
- dm_extent_t *extentp,
- u_int *nelemp);
-
-
- /*
- * Misc. defines.
- */
-
- #define DM_GLOBAL_HANP ((void *)(1))
- #define DM_GLOBAL_HLEN ((size_t)(1))
-
- #define DM_NO_SESSION 0
- #define DM_MAX_MSG_DATA 3960
- #define DM_SESSION_INFO_LEN 256
-
- #define DM_WAIT 0
- #define DM_NOWAIT 1
-
- #define DM_FALSE 0
- #define DM_TRUE 1
-
- #define DM_GET_VALUE(p, field, type) \
- ((type) ((char *)(p) + (p)->field.vd_off))
- #define DM_GET_LEN(p, field) \
- ((p)->field.vd_len)
- #define DM_STEP_TO_NEXT(p, type) \
- ((type) ((p)->_link ? (char *)(p) + (p)->_link : NULL))
-
- /*
- * Event specific data structures.
- */
-
- typedef struct dm_data_event {
- dm_vardata_t de_handle;
- dm_off_t de_offset;
- dm_size_t de_length;
- } dm_data_event_t;
-
- typedef struct dm_namesp_event {
- dm_vardata_t ne_handle1;
- dm_vardata_t ne_handle2;
- dm_vardata_t ne_name1;
- dm_vardata_t ne_name2;
- mode_t ne_mode;
- int ne_retcode;
- } dm_namesp_event_t;
-
- #endif /* _SYS_DMI_H */
-